/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package servidorped;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 *
 * @author Micosil
 */
public class Conversation {
    
    /*
     * Si esperara tener grandes volumenes de datos cambiando en una unica conversacion
     * sincronizaría esto, pero la verdad es que no lo espero y sincronizarlo ralentiza 
     * el programa y hace que el código sea medio ilegible.
     */
    

    private Date creationDate = Calendar.getInstance().getTime();
    private List<User> usersInConversation = new ArrayList();
    private List<User> invitedUsers = new ArrayList();
    private List<User> hasJoinedAtSomePoint = new ArrayList();
    private List<String> chatLines = new ArrayList();
    private int id;
    static int idcounter = 0;    

    public Conversation(User host) {
        id = idcounter;
        idcounter++;
        usersInConversation.add(host);
        hasJoinedAtSomePoint.add(host);
    }

    public List<String> retrieveHistory() {
        return this.chatLines;
    }

    public Date retrieveCreationDate() {
        return creationDate;
    }
    
    public List<User> retrieveHistoryUserList(){
        return this.hasJoinedAtSomePoint;
    }

    public void addLine(String string) {
        chatLines.add(string);
    }

    public void invite(User user) {
        invitedUsers.add(user);
    }

    public boolean isInvited(User user) {
        return invitedUsers.contains(user);
    }

    public void join(User user) {
        invitedUsers.remove(user);
        usersInConversation.add(user);
        hasJoinedAtSomePoint.add(user);
    }

    public void leave(User user) {
        invitedUsers.add(user);
        usersInConversation.remove(user);
    }

    public List<User> getUsers() {
        return (usersInConversation);
    }

    public int getID() {
        return this.id;
    }

    public void uninvite(User user) {
        invitedUsers.remove(user);
    }
}
